package content

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"path"
	"time"
	"woo-server/coms/structs"
	"woo-server/coms/utils"
	"woo-server/models/api"
	"woo-server/models/db/content"
)

// 结构
type FileGroupService struct {
	*structs.Common
}

// 初始化
func NewFileGroupService(com *structs.Common) *FileGroupService {
	return &FileGroupService{com}
}

// 上传单图片
func (f *FileGroupService) UploadFile(context *gin.Context, groupId int) *api.ResultEntity {
	// 获取不包含目录的文件名
	//filenameall := path.Base(file.Filename)
	// 文件前缀 可以使用切片的方式获取：
	//fileprefix := filenameall[0 : len(filenameall)-len(filesuffix)]
	//fileprefix, err := strings.TrimSuffix(filenameall, filesuffix)

	// 单文件
	file, fileErr := context.FormFile("file")
	if fileErr != nil {
		return api.Error(fileErr.Error())
	}
	fmt.Println("uploadSize: ", file.Size)
	// 保存目录
	filePath := "/static/images"
	// 保存名称
	fileName := time.Now().Format("20060102150405")
	// 文件后缀
	fileSuffix := path.Ext(file.Filename)
	// DS 系统/杠
	DS := "/"
	// 完整保存路径
	dist := filePath + DS + "public" + DS + fileName + fileSuffix
	// 上传文件至指定目录
	err := context.SaveUploadedFile(file, "."+dist)
	if err != nil {
		return api.Error(err.Error())
	}
	fileModel := content.NewUploadFile(f.Common)
	fileModel.SetCreateInfo(f.Claim.UserId)
	fileModel.FileName = dist
	fileModel.Extension = fileSuffix
	fileModel.GroupId = 1
	fileModel.Storage = "local"
	fileModel.FileSize = file.Size
	fileModel.FileType = "image"
	resultErr := fileModel.Create()
	if resultErr != nil {
		return api.Error(resultErr.Error())
	}
	//result := map[string]interface{}{"Name": dist, "Group": "public", "Suffix": fileSuffix, "FilePath": filePath, "FileId": fileModel.FileId}
	fmt.Println(resultErr, fileModel)
	return api.SuccessToJson(fileModel, "success")
}

// 获取所有分组
// return treeList 树状菜单 , list 非树状
func (f *FileGroupService) GetFileGroupList(context *gin.Context) *api.ResultEntity {

	search := context.Query("search")
	page := structs.SetInt(context.Query("page"))
	pageSize := structs.SetInt(context.Query("pageSize"))
	Model := content.NewFileGroup(f.Common)
	list, total := Model.GetListAndTotal(search, page, pageSize)
	result := map[string]interface{}{"list": list, "total": total}
	return api.SuccessToJson(result, "分组列表获取成功!")
}

// 获取所有分组
// return treeList 树状菜单 , list 非树状
func (f *FileGroupService) GetAllFileGroupList(context *gin.Context) *api.ResultEntity {
	Model := content.NewFileGroup(f.Common)
	result, _ := Model.GetListAndTotal("", 1, 100)
	return api.SuccessToJson(result, "success")
}

// 添加分组
// @param isHidden 是否显示
// return treeList 树状菜单 , list 非树状
func (f *FileGroupService) AddFileGroup(context *gin.Context) *api.ResultEntity {
	Model := content.NewFileGroup(f.Common)

	GroupId := structs.SetInt(context.Query("GroupId"))
	var err error
	msg := ""
	if GroupId != 0 {
		Model.GroupId = uint64(GroupId)
		Model.SetUpdateInfo(f.Claim.UserId)
		msg = "编辑分组成功"
	} else {
		Model.SetCreateInfo(f.Claim.UserId)
		msg = "添加分组成功"
	}
	Model.GroupName = context.Query("GroupName")
	Model.GroupType = context.Query("GroupType")
	Model.Sort = structs.SetInt(context.Query("Sort"))
	err = Model.Save()

	if err != nil {
		return api.Error(err.Error())
	}
	//} else {
	//	Model.SetCreateInfo(f.Claim.UserId)
	//	Model.GroupId = uint64(GroupId)
	//	Model.GroupName = context.Query("GroupName")
	//	Model.GroupType = context.Query("GroupType")
	//	Model.Sort = structs.SetInt(context.Query("Sort"))
	//	err = Model.Create()
	//	if err != nil {
	//		return api.Error(err.Error())
	//	}
	//}
	return api.Success(msg)
}

// 当前用户信息
func (f *FileGroupService) GetConfig(context *gin.Context) *api.ResultEntity {
	Model := content.NewFileGroup(f.Common)
	data := Model.GetConfig()
	return api.SuccessToJson(data, "获取文章配置成功!")
}

func (f *FileGroupService) Delete(context *gin.Context) *api.ResultEntity {
	//context.Param()
	// 接收POST参数
	GroupId := context.PostForm("GroupId")
	// 校验参数
	if GroupId == "" {
		return api.Error("ID不能为空!")
	}
	// 实例化数据库
	gModel := content.NewFileGroup(f.Common)
	fModel := content.NewUploadFile(f.Common)
	result := fModel.GetFirst("group_id = " + GroupId)
	//fmt.Println("afasddfsdfsdfsdfsw:  ",result.FileId)
	if result.FileId != 0 {
		return api.Error("该分组下有文件.请移除在删除分组!")
	}
	// 执行删除
	gModel.GroupId = uint64(structs.SetInt(GroupId))
	// 删除数据
	err := gModel.Delete()
	if err != nil {
		utils.LogError("删除文章报错:%s", err.Error())
		return api.Error(err.Error())
	}
	return api.Success("删除成功")
}
